import java.util.ArrayList;
import java.io.*;

public class Consola implements Pantalla {
	
	private ConsoleReader ingreso = new ConsoleReader();
	
	//muestra mensaje de bienvenida
	public void mostrarBienvenida(){
		System.out.println("************Bienvenido al juego: Correos, venimos atrasados!!**************");
		System.out.println("Ingrese los nombres de los participantes separados por espacios, recuerde que el minimo son dos jugadores y como maximo cuatro.");
	}
	
	//muestra el menu principal para cada etapa
	public void mostrarMenuEtapa(int etapa){
		System.out.println("---------------------");
		System.out.println("1 - Etapa " + etapa);
		System.out.println("2 - Mostrar Mapa");		
		System.out.println("3 - Ver informacion actual");		
	}
	
	//muestra menu especifico al levantar una carta
	public void mostrarMenuLevantarCarta(){
		System.out.println("---------------------");
		System.out.println("10 - Levantar carta del mazo");		
	}
	
	//muestra menu especifico al agregar una carta
	public void mostrarMenuAgregarCarta(){
		System.out.println("---------------------");
		System.out.println("10 - Pasar");		
	}
	
	//muestra menu especifico al cerrar un camino
	public void mostrarMenuCerrarCamino(){
		System.out.println("---------------------");
		System.out.println("1 - Cerrar camino");
		System.out.println("2 - Pasar");
	}
		
	//metodo que pide un numero
	public int pedirOpcion() throws IOException{		
		try{
			ArrayList<String> palabras = ingreso.getInput();
			return Integer.valueOf(palabras.get(0));
		}catch(Exception e){
			throw new IOException();
		}
	}
	
	//meto que pide una serie de strings
	public ArrayList<String> pedirPalabra(){
		return ingreso.getInput();
	}
	
	//muestra el mapa por pantalla
	public void mostrarMapa(ArrayList<Region> regiones, ArrayList<Ruta> rutas){
		//muestra de ciudades agrupadas por region
		System.out.println("Regiones: ");
		for(Region reg : regiones){
			System.out.println("Region: " + reg.getNombre());			
			System.out.println("Ciudades");
			System.out.println("");
			for(Ciudad c : reg.getCiudades()){
				System.out.println(c.getNombre());
			}
			System.out.println("---------------------");
		}
		
		//muestra de rutas
		System.out.println("Rutas: ");
		for(Ruta r : rutas){						
			System.out.println(r.getDesde().getNombre() + " - " + r.getHasta().getNombre());
		}
		
	}		
	
	//muestra el listado de cartas
	public void mostrarCartas(ArrayList<Carta> cartas){
		int contador = 0;			
		for(Carta c : cartas){			
			System.out.println(contador + "- " + c.getCiudad().getNombre() + " - " + c.getCiudad().getRegion().getNombre());
			contador++;
		}
	}
	
	//muestra el listado de fichas
	public void mostrarFichas(ArrayList<Ficha> fichas){
		for(Ficha f : fichas){
			System.out.println("tipo: " + f.getTipo());
			System.out.println(f.getValor() + " puntos");
		}
	}
	
	//muestra el listado de personajes
	public void mostrarMenuPersonajes(ArrayList<Personaje> personajes){
		System.out.println("Marque el personaje deseado si desea utilizar la ayuda de alguno de los siguientes ayudantes");
		int contador = 0;
		for(Personaje pj : personajes){
			System.out.println(contador + "- " + pj.getNombre() + " - " + pj.getClass());
			contador++;
		}
		System.out.println("10- continuar");
	}
	
	//muestra por pantalla el string recibido
	public void escribir(String msg){
		System.out.println(msg);
	}
	
	//muestra por pantalla el numero recibido
	public void escribir(int num){
		System.out.println(num);
	}
	
	//limpia la pantalla
	public void limpiarPantalla(){
		for (int i = 0; i< 50 ; i++) {
			System.out.println();
		}
	}
			
	//limpia el buffer
	@Override
	public void clearBuffer() {
		ingreso.getInput();	
	}
	
}
